<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Changelog</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../index.html" title="Chapter 1. Boost.Log v2">
<link rel="up" href="../index.html" title="Chapter 1. Boost.Log v2">
<link rel="prev" href="../boost/log/current_scope.html" title="Function current_scope">
<link rel="next" href="todo.html" title="TODO in future releases">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr><td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td></tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../boost/log/current_scope.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="log.changelog"></a><a class="link" href="changelog.html" title="Changelog">Changelog</a>
</h2></div></div></div>
<h4>
<a name="log.changelog.h0"></a>
      <span class="phrase"><a name="log.changelog.2_24__boost_1_79"></a></span><a class="link" href="changelog.html#log.changelog.2_24__boost_1_79">2.24,
      Boost 1.79</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          In <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend"><code class="computeroutput"><span class="identifier">text_file_backend</span></code></a>,
          added support for appending to a previously written log file, when file
          rotation is used and log file names use file counters. For this to work,
          the target storage directory must be the same as the directory where the
          active log file is written, and <code class="computeroutput"><span class="identifier">text_file_backend</span><span class="special">::</span><span class="identifier">scan_for_files</span></code>
          must be called prior to emitting any log records to discover the last file
          counter used in the target storage directory. Previously, in such a configuration
          the sink backend would generate a new file name instead of appending to
          the last written one.
        </li>
<li class="listitem">
          <span class="bold"><strong>Breaking change:</strong></span> The <code class="computeroutput"><a class="link" href="../boost/log/sinks/file/collector.html" title="Struct collector">collector</a></code>
          interface has changed:
          <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
<li class="listitem">
                <code class="computeroutput"><span class="identifier">scan_for_files</span></code> method
                returns a <code class="computeroutput"><span class="identifier">scan_result</span></code>
                structure that contains information collected during the scan;
              </li>
<li class="listitem">
                <code class="computeroutput"><span class="identifier">is_in_storage</span></code> method
                added for testing if a path refers to a file within the target storage
                directory.
              </li>
</ul></div>
        </li>
<li class="listitem">
          Added a new <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.invoke" title="Invoke manipulator"><code class="computeroutput"><span class="identifier">invoke_manip</span></code></a> stream manipulator
          that can be used for injecting user's function into a stream output expression.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Fixed file counter being set to zero if the user calls <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file.file_scanning" title="Scanning for rotated files"><code class="computeroutput"><span class="identifier">text_file_backend</span><span class="special">::</span><span class="identifier">scan_for_files</span></code></a> multiple times,
          and the second and the following calls don't find any new files. (<a href="https://github.com/boostorg/log/issues/179" target="_top">GH#179</a>)
        </li></ul></div>
<h4>
<a name="log.changelog.h1"></a>
      <span class="phrase"><a name="log.changelog.2_23__boost_1_78"></a></span><a class="link" href="changelog.html#log.changelog.2_23__boost_1_78">2.23,
      Boost 1.78</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Updated detection of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">codecvt</span></code>
          specializations for <code class="computeroutput"><span class="keyword">char16_t</span></code>
          and <code class="computeroutput"><span class="keyword">char32_t</span></code> for compatibility
          with C++17 and later. (<a href="https://github.com/boostorg/log/pull/159" target="_top">PR#159</a>)
        </li>
<li class="listitem">
          Added support for C++17 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">byte</span></code>
          type to receive methods of the <a class="link" href="detailed/utilities.html#log.detailed.utilities.ipc.reliable_message_queue" title="Reliable message queue">inter-process
          message queue</a>.
        </li>
<li class="listitem">
          On Windows, when building the library for Windows 8 or later, the library
          will use <code class="computeroutput"><span class="identifier">nt62</span></code> tag in the
          version namespace to denote the target OS ABI. For example, the version
          namespace could be named as <code class="computeroutput"><span class="identifier">v2_mt_nt62</span></code>.
          This name will be part of all symbols exported by the library. Use the
          <code class="computeroutput"><span class="identifier">BOOST_USE_WINAPI_VERSION</span></code>
          macro consistenly when building Boost and your code to request the minimum
          target Windows version.
        </li>
<li class="listitem">
          Improved performance of SSSE3 and AVX2 implementations of the <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.dump" title="Binary dump manipulator"><code class="computeroutput"><span class="identifier">dump</span></code></a> stream manipulator.
        </li>
<li class="listitem">
          Added support for CMake build system. Only library build is supported at
          this moment, Boost.Build is still used for running tests.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed a race condition on POSIX systems in <a class="link" href="detailed/utilities.html#log.detailed.utilities.ipc.reliable_message_queue" title="Reliable message queue"><code class="computeroutput"><span class="identifier">reliable_message_queue</span><span class="special">::</span><span class="identifier">open_or_create</span></code></a> or the equivalent
          constructor. Multiple threads or processes calling <code class="computeroutput"><span class="identifier">open_or_create</span></code>
          concurrently with sending or receiving messages from the same queue could
          end up corrupting the queue contents and potentially crashing the process.
          (<a href="https://github.com/boostorg/log/issues/162" target="_top">GH#162</a>)
        </li>
<li class="listitem">
          Added a workaround for <code class="computeroutput"><span class="identifier">b2</span> <span class="identifier">install</span></code> failing on Windows because of
          missing <code class="computeroutput"><span class="identifier">boost_log_setup</span></code>
          library if <code class="computeroutput"><span class="identifier">BOOST_LOG_WITHOUT_SETTINGS_PARSERS</span></code>
          is defined. (<a href="https://github.com/boostorg/log/issues/164" target="_top">GH#164</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h2"></a>
      <span class="phrase"><a name="log.changelog.2_22__boost_1_77"></a></span><a class="link" href="changelog.html#log.changelog.2_22__boost_1_77">2.22,
      Boost 1.77</a>
    </h4>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed compilation on Linux for riscv32 target. (<a href="https://github.com/boostorg/log/pull/150" target="_top">PR#150</a>)
        </li>
<li class="listitem">
          Setting <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">app</span></code> file open mode in <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend"><code class="computeroutput"><span class="identifier">text_file_backend</span></code></a> now also implies
          <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ios_base</span><span class="special">::</span><span class="identifier">ate</span></code>. This fixes incorrect accounting
          for the initial size of the log file opened for appending. (<a href="https://github.com/boostorg/log/issues/151" target="_top">GH#151</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h3"></a>
      <span class="phrase"><a name="log.changelog.2_21__boost_1_76"></a></span><a class="link" href="changelog.html#log.changelog.2_21__boost_1_76">2.21,
      Boost 1.76</a>
    </h4>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Corrected a formal race condition in the thread-safe log record queue implementation
          used in the <code class="computeroutput"><span class="identifier">unbounded_fifo_queue</span></code>
          policy of the <code class="computeroutput"><a class="link" href="../boost/log/sinks/asynchronous_sink.html" title="Class template asynchronous_sink">asynchronous_sink</a></code>
          frontend. The race could be detected by TSAN, but it was not a real problem
          on most current CPU architectures and compilers. (<a href="https://github.com/boostorg/log/issues/139" target="_top">GH#139</a>)
        </li>
<li class="listitem">
          When copying a logger with a channel attribute (e.g. <code class="computeroutput"><span class="identifier">channel_logger</span></code>),
          the channel attribute is now deep-copied from the original logger. This
          means that modifying the channel in the new logger will no longer affect
          the original logger.
        </li>
<li class="listitem">
          Replaced the use of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">&gt;</span></code> in template parameters with a new tag
          type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">log</span><span class="special">::</span><span class="identifier">use_std_allocator</span></code> to silence libc++ warnings
          about the former being deprecated in C++17 and later. The tag indicates
          that the instantiated template should be using a specialization of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code> internally to allocate dynamic
          memory, so the change has no functional effect. (<a href="https://github.com/boostorg/log/issues/141" target="_top">GH#141</a>)
        </li>
<li class="listitem">
          Boost.Log no longer defines <code class="computeroutput"><span class="identifier">__MSVCRT_VERSION__</span></code>
          macro on MinGW and MinGW-w64. This macro is used to select the target C
          runtime library. Defining this macro caused incompatibility with UCRT,
          which is available as an option in recent MinGW-w64. (<a href="https://github.com/boostorg/log/pull/149" target="_top">PR#149</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h4"></a>
      <span class="phrase"><a name="log.changelog.2_20__boost_1_75"></a></span><a class="link" href="changelog.html#log.changelog.2_20__boost_1_75">2.20,
      Boost 1.75</a>
    </h4>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Corrected the file counter that would be used in <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend"><code class="computeroutput"><span class="identifier">text_file_backend</span></code></a> when generating
          the target file name (based on the pattern set by <code class="computeroutput"><span class="identifier">set_target_file_name_pattern</span></code>
          method) when the log file is rotated. The backend used to use the next
          value of file counter, which could cause some counter values to be skipped
          on application restarts. (<a href="https://github.com/boostorg/log/issues/125" target="_top">GH#125</a>)
        </li>
<li class="listitem">
          Replaced a volatile version counter in <code class="computeroutput"><span class="identifier">basic_sink_frontend</span></code>
          with an atomic. This should silence clang-cl warnings about deprecated
          uses of <code class="computeroutput"><span class="keyword">volatile</span></code>. (<a href="https://github.com/boostorg/log/issues/128" target="_top">GH#128</a>)
        </li>
<li class="listitem">
          In the <code class="computeroutput"><a class="link" href="../boost/log/sinks/asynchronous_sink.html" title="Class template asynchronous_sink">asynchronous_sink</a></code>
          frontend, resolved a possible conflict between <code class="computeroutput"><span class="identifier">flush</span></code>
          and <code class="computeroutput"><span class="identifier">run</span></code> methods, if <code class="computeroutput"><span class="identifier">run</span></code> is called from a user's thread instead
          of the internal dedicated thread spawned by the frontend. <code class="computeroutput"><span class="identifier">run</span></code> and <code class="computeroutput"><span class="identifier">feed_records</span></code>
          methods will wait for <code class="computeroutput"><span class="identifier">flush</span></code>
          to complete, if one is in progress. Additionally, <code class="computeroutput"><span class="identifier">stop</span></code>
          now explicitly doesn't wait for the ongoing record feeding operation to
          complete. (<a href="https://github.com/boostorg/log/issues/131" target="_top">GH#131</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h5"></a>
      <span class="phrase"><a name="log.changelog.2_19__boost_1_74"></a></span><a class="link" href="changelog.html#log.changelog.2_19__boost_1_74">2.19,
      Boost 1.74</a>
    </h4>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          The <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.syslog" title="Syslog backend">syslog</a> sink
          backend now verifies the IP version of the local and target addresses set
          by user. The addresses must have the same IP version as was specified in
          the <code class="computeroutput"><span class="identifier">ip_version</span></code> named parameter
          on the sink backend construction (by default, IPv4 is assumed). When an
          address is obtained as a result of host name resolution, only addresses
          with matching IP version are considered. (<a href="https://github.com/boostorg/log/issues/119" target="_top">GH#119</a>)
        </li></ul></div>
<p>
      <span class="bold"><strong>New Features:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Move constructors and assignment operators of various components were marked
          <code class="computeroutput"><span class="keyword">noexcept</span></code>.
        </li>
<li class="listitem">
          Added a new <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.range" title="Range manipulator"><code class="computeroutput"><span class="identifier">range_manip</span></code></a> stream manipulator
          that can be used for outputting elements of a range, optionally separated
          by a delimiter.
        </li>
<li class="listitem">
          Added a new <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.tuple" title="Tuple manipulator"><code class="computeroutput"><span class="identifier">tuple_manip</span></code></a> stream manipulator
          that can be used for outputting elements of a tuple or any other heterogeneous
          sequence, optionally separated by a delimiter.
        </li>
<li class="listitem">
          Added a new <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.optional" title="Optional manipulator"><code class="computeroutput"><span class="identifier">optional_manip</span></code></a> stream manipulator
          that can be used for outputting optionally present values.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h6"></a>
      <span class="phrase"><a name="log.changelog.2_18__boost_1_73"></a></span><a class="link" href="changelog.html#log.changelog.2_18__boost_1_73">2.18,
      Boost 1.73</a>
    </h4>
<p>
      <span class="bold"><strong>New Features:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Default sink used in trivial logging, when no sinks are registered in the
          logging core, now automatically flushes output after each log record. (<a href="https://github.com/boostorg/log/issues/103" target="_top">GH#103</a>)
        </li>
<li class="listitem">
          <code class="computeroutput"><span class="identifier">core</span><span class="special">::</span><span class="identifier">flush</span></code> now performs a flush on the default
          sink used for trivial logging, when no sinks are registered.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Added a workaround for some syslog API implementations (e.g. glibc), which
          do not save the application identification string in <code class="computeroutput"><span class="identifier">openlog</span></code>
          call. Such implementations could access already freed memory on each <code class="computeroutput"><span class="identifier">syslog</span></code> call, resulting in undefined behavior.
          (<a href="https://github.com/boostorg/log/issues/97" target="_top">GH#97</a>)
        </li>
<li class="listitem">
          Fixed that log file rotation on a specific day of month (e.g. <code class="computeroutput"><span class="identifier">rotation_at_time_point</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">gregorian</span><span class="special">::</span><span class="identifier">greg_day</span><span class="special">(</span><span class="number">1</span><span class="special">))</span></code>) could
          be silently ignored and not happen. (<a href="https://github.com/boostorg/log/issues/98" target="_top">GH#98</a>)
        </li>
<li class="listitem">
          Fixed that <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend"><code class="computeroutput"><span class="identifier">text_file_backend</span></code></a><code class="computeroutput"><span class="special">::</span><span class="identifier">rotate_file</span></code>
          could throw if there were no log records written yet and target file name
          pattern was set. The method would attempt to rename a missing file, which
          would result in an exception. Note that <code class="computeroutput"><span class="identifier">rotate_file</span></code>
          may still throw because of a missing log file, if the file being rotated
          is removed by a third party.
        </li>
<li class="listitem">
          Ported various components of the library to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span></code>
          to improve compatibility with C++20 allocators.
        </li>
<li class="listitem">
          Fixed compilation errors when building in MSYS2 Cygwin environment. (<a href="https://github.com/boostorg/log/issues/102" target="_top">GH#102</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h7"></a>
      <span class="phrase"><a name="log.changelog.2_17__boost_1_71"></a></span><a class="link" href="changelog.html#log.changelog.2_17__boost_1_71">2.17,
      Boost 1.71</a>
    </h4>
<p>
      <span class="bold"><strong>New features:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Improved support for C++17 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string_view</span></code>
          in <code class="computeroutput"><a class="link" href="../boost/log/basic_formatting_ostream.html" title="Class template basic_formatting_ostream">basic_formatting_ostream</a></code>.
          The string view can now participate in character code conversion on output.
        </li>
<li class="listitem">
          Added <code class="computeroutput"><span class="identifier">auto_newline</span></code> <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.auto_newline" title="Automatic newline insertion">formatter</a>
          and <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.auto_newline" title="Automatic newline insertion">stream
          manipulator</a>. It can be used to ensure that formatted output always
          ends with a newline while avoiding duplicate newlines.
        </li>
<li class="listitem">
          In the <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_ostream" title="Text stream backend">output stream</a>,
          <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text file</a> and
          <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_multifile" title="Text multi-file backend">text multi-file</a>
          sink backends added support for configuring behavior with regard to appending
          a trailing newline to every formatted log record. The user can specify
          a value of the <code class="computeroutput"><a class="link" href="../sinks.html#boost.log.sinks.auto_newline_mode">auto_newline_mode</a></code> enum either
          in the <code class="computeroutput"><span class="identifier">auto_newline_mode</span></code>
          named parameter of the backend constructor or by calling the <code class="computeroutput"><span class="identifier">set_auto_newline_mode</span></code> method on the backend
          post-construction. The <code class="computeroutput"><span class="identifier">auto_newline_mode</span></code>
          named parameter is also supported in the <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.convenience" title="Convenience functions">convenience
          functions</a> for initializing sinks. When initializing from <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.settings" title="Library initialization from a settings container">settings</a>
          or a config file, the behavior is controlled by the new "AutoNewline"
          parameter of the sink.
        </li>
</ul></div>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/src/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
        The default behavior with regard to trailing newlines has changed slightly
        compared to the previous Boost.Log releases. The backends will now only add
        a trailing newline if there isn't one in the formatted log message string
        already. In previous releases a newline was added unconditionally. In general,
        users are advised to configure their formatters so that the trailing newline
        is added there, if needed (e.g. by using <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.auto_newline" title="Automatic newline insertion"><code class="computeroutput"><span class="identifier">auto_newline</span></code></a> formatter), and disable
        the automatic trailing newline insertion in the sink backends. This feature
        mostly exists for backward compatibility and can be considered deprecated.
      </p></td></tr>
</table></div>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_ostream" title="Text stream backend">Output stream</a>
          and <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_multifile" title="Text multi-file backend">text multi-file</a>
          sink backends can now be constructed with named parameters.
        </li>
<li class="listitem">
          Added support for passing arbitrary function objects (as opposed to only
          <a href="http://www.boost.org/doc/libs/release/libs/phoenix/doc/html/index.html" target="_top">Boost.Phoenix</a>
          function objects, which were supported before) in the <code class="computeroutput"><span class="identifier">filter</span></code>
          and <code class="computeroutput"><span class="identifier">format</span></code> named parameters
          to sink constructors and <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.convenience" title="Convenience functions">convenience
          functions</a> for initializing sinks. For example, it is now possible
          to specify C++11 lambda functions directly in these parameters. (<a href="https://github.com/boostorg/log/issues/63" target="_top">GH#63</a>)
        </li>
<li class="listitem">
          In the default filter and formatter factories used in <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.filter_formatter" title="Filter and formatter parsers">filter
          and formatter parsers</a>, added support for severity level attribute
          values of type <code class="computeroutput"><a class="link" href="reference.html#boost.log.trivial.severity_level">boost::log::trivial::severity_level</a></code>. For filters,
          the support is limited to attributes with "Severity" name. This
          relieves the user from having to register filter and formatter factories
          in order to use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">log</span><span class="special">::</span><span class="identifier">trivial</span><span class="special">::</span><span class="identifier">severity_level</span></code> with filters and formatters
          parsed from strings or <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.settings" title="Library initialization from a settings container">settings</a>.
          Note that any other custom severity level enums must still be <a class="link" href="extension/settings.html" title="Extending library settings support">registered</a>,
          as before.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed incorrect parsing of components of the rotated file names while scanning
          for files in the <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text
          file sink backend</a>. If the file name pattern ended with a placeholder
          (for example, a file counter), the <code class="computeroutput"><span class="identifier">scan_for_files</span></code>
          method would not find files matching that pattern in the target storage,
          leaving them unmanaged. In particular, such files would not be deleted
          to free target storage. (<a href="https://github.com/boostorg/log/issues/78" target="_top">GH#78</a>)
        </li>
<li class="listitem">
          Updated <code class="computeroutput"><a class="link" href="../boost/log/basic_formatting_ostream.html" title="Class template basic_formatting_ostream">basic_formatting_ostream</a></code>
          and <code class="computeroutput"><a class="link" href="../boost/log/basic_record_ostream.html" title="Class template basic_record_ostream">basic_record_ostream</a></code>
          to make it possible to overload stream output operators for pointers to
          user-defined types. User-defined <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></code> overloads taking <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span></code> and a pointer argument
          should now be picked up by the compiler when the pointer is being written
          to one of Boost.Log streams. (<a href="https://github.com/boostorg/log/issues/84" target="_top">GH#84</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h8"></a>
      <span class="phrase"><a name="log.changelog.2_16__boost_1_70"></a></span><a class="link" href="changelog.html#log.changelog.2_16__boost_1_70">2.16,
      Boost 1.70</a>
    </h4>
<p>
      <span class="bold"><strong>New features:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Added support for generating another log file name before collecting the
          file in the <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text file
          sink backend</a>. This allows to combine <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file.appending" title="Appending to the previously written files">appending</a>
          to an existing log file with timestamps and file counters in log filenames,
          and, consequently, <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file.file_collection" title="Managing rotated files">file
          collection</a> in general. To enable this feature, one must set the
          target file name pattern in the text file sink backend (using the <code class="computeroutput"><span class="identifier">target_file_name</span></code> named parameter, <code class="computeroutput"><span class="identifier">text_file_backend</span><span class="special">::</span><span class="identifier">set_target_file_name_pattern</span></code> method call
          or "TargetFileName" sink parameter in the <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.settings" title="Library initialization from a settings container">settings</a>).
          This pattern will be used to generate a new file name when the file is
          finished writing and is about to be collected. Therefore, the original
          (active) file name can be set to a stable pattern (e.g. "app.log")
          so that appending to a previously written file works. Then the target file
          name can include a timestamp or a counter (e.g. "app-2019-01-05.log"),
          so that different rotated files don't conflict in the target storage.
        </li></ul></div>
<h4>
<a name="log.changelog.h9"></a>
      <span class="phrase"><a name="log.changelog.2_15__boost_1_69"></a></span><a class="link" href="changelog.html#log.changelog.2_15__boost_1_69">2.15,
      Boost 1.69</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Updated syslog sink backend to avoid using deprecated <a href="http://www.boost.org/doc/libs/release/doc/html/boost_asio.html" target="_top">Boost.ASIO</a>
          interfaces. (<a href="https://github.com/boostorg/log/issues/59" target="_top">GH#59</a>)
        </li></ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Fixed a problem that could cause incorrect estimate of the total size of
          rotated files in the target storage if the <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text
          file sink backend</a> was writing directly into the target storage directory
          and the log file name matched one of the old files in the storage, and
          that file was picked as the old log file by <code class="computeroutput"><span class="identifier">file_collector</span><span class="special">::</span><span class="identifier">scan_for_files</span></code>.
          Note that this configuration is still not fully supported and may result
          in premature file deletion if multiple sinks write files directly into
          the common target storage directory. It is recommended to configure sinks
          to write log files into directories different from the target storage directory.
        </li></ul></div>
<h4>
<a name="log.changelog.h10"></a>
      <span class="phrase"><a name="log.changelog.2_14__boost_1_68"></a></span><a class="link" href="changelog.html#log.changelog.2_14__boost_1_68">2.14,
      Boost 1.68</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Improved support for VxWorks. (<a href="https://github.com/boostorg/log/pull/39" target="_top">PR#39</a>)
        </li></ul></div>
<h4>
<a name="log.changelog.h11"></a>
      <span class="phrase"><a name="log.changelog.2_13__boost_1_67"></a></span><a class="link" href="changelog.html#log.changelog.2_13__boost_1_67">2.13,
      Boost 1.67</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Updated library to use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span></code>
          where possible to work with allocators. This should improve compatibility
          with C++ post C++17.
        </li>
<li class="listitem">
          Added documentation for the "Append" <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.settings" title="Library initialization from a settings container">config
          file</a> parameter for "TextFile" sinks. The parameter was
          supported previously, only the documentation was missing.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h12"></a>
      <span class="phrase"><a name="log.changelog.2_12__boost_1_66"></a></span><a class="link" href="changelog.html#log.changelog.2_12__boost_1_66">2.12,
      Boost 1.66</a>
    </h4>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Fixed a bug in <code class="computeroutput"><span class="identifier">file_collector</span><span class="special">::</span><span class="identifier">scan_for_files</span></code>
          that caused zero file counter to be returned if the target directory contained
          a file with the maximum counter value in the name. This used to cause incorrectly
          named log files in the target directory after the user's application restart.
        </li></ul></div>
<h4>
<a name="log.changelog.h13"></a>
      <span class="phrase"><a name="log.changelog.2_11__boost_1_65"></a></span><a class="link" href="changelog.html#log.changelog.2_11__boost_1_65">2.11,
      Boost 1.65</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Updated library build scripts to unify system macros configuration for
          different platforms. In particular, this should improve compatibility with
          Solaris.
        </li></ul></div>
<h4>
<a name="log.changelog.h14"></a>
      <span class="phrase"><a name="log.changelog.2_10__boost_1_63"></a></span><a class="link" href="changelog.html#log.changelog.2_10__boost_1_63">2.10,
      Boost 1.63</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Removed the previously deprecated <code class="computeroutput"><span class="identifier">type_info_wrapper</span></code>.
          As previously suggested, <a href="http://www.boost.org/doc/libs/release/doc/html/boost_typeindex.html" target="_top">Boost.TypeIndex</a>
          is recommended as a replacement.
        </li></ul></div>
<p>
      <span class="bold"><strong>New features:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Added a way to access the current file name from the <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text
          file sink backend</a>. The file name can be obtained with the <code class="computeroutput"><span class="identifier">get_current_file_name</span></code> method.
        </li>
<li class="listitem">
          Added a way to disable log file rotation on <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text
          file sink backend</a> destruction, which typically happens on program
          termination. This can be done via <code class="computeroutput"><span class="identifier">enable_final_rotation</span></code>
          backend constructor parameter or similarly named method, or with the <code class="computeroutput"><span class="identifier">EnableFinalRotation</span></code> parameter in the
          settings.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed compilation errors for Android API prior to version 21.
        </li>
<li class="listitem">
          Streaming operators now take scalar types and enums by value. This allows
          to output static constants and bitfields directly into formatting stream
          and record stream. (<a href="https://svn.boost.org/trac/boost/ticket/11998" target="_top">#11998</a>)
        </li>
<li class="listitem">
          Fixed auto-detection of native syslog API. (<a href="https://svn.boost.org/trac/boost/ticket/12600" target="_top">#12600</a>)
        </li>
<li class="listitem">
          In UDP socket based syslog backend implementation, changed the syslog message
          format for better compliance with RFC3164.
        </li>
<li class="listitem">
          File close handler installed in <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text
          file sink backend</a> is no longer called if the file is not open yet.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h15"></a>
      <span class="phrase"><a name="log.changelog.2_9__boost_1_62"></a></span><a class="link" href="changelog.html#log.changelog.2_9__boost_1_62">2.9,
      Boost 1.62</a>
    </h4>
<p>
      <span class="bold"><strong>New features:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Added new tools for inter-process logging on a local machine. The implementation
          includes a <a class="link" href="detailed/utilities.html#log.detailed.utilities.ipc.object_name" title="Resource name wrapper">resource
          name wrapper</a>, an <a class="link" href="detailed/utilities.html#log.detailed.utilities.ipc.reliable_message_queue" title="Reliable message queue">inter-process
          message queue</a> and a <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_ipc_message_queue" title="Text IPC message queue backend">sink
          backend</a>. The new functionality is optional and can be disabled by
          defining <a class="link" href="installation/config.html" title="Configuring and building the library"><code class="computeroutput"><span class="identifier">BOOST_LOG_WITHOUT_IPC</span></code></a>
          macro at library build time. Thanks to Lingxi Li for the initial patch.
        </li>
<li class="listitem">
          Added a new character decorator called <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.decorators.max_size" title="String length limiting decorator"><code class="computeroutput"><span class="identifier">max_size_decor</span></code></a>. The new decorator
          allows to limit the output of its adopted formatter up to the specified
          length. This can be useful with the new inter-process sink backend.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          Fixed that logging streams could retain formatting settings across different
          log records. (<a href="https://svn.boost.org/trac/boost/ticket/12178" target="_top">#12178</a>)
        </li></ul></div>
<h4>
<a name="log.changelog.h16"></a>
      <span class="phrase"><a name="log.changelog.2_8__boost_1_61"></a></span><a class="link" href="changelog.html#log.changelog.2_8__boost_1_61">2.8,
      Boost 1.61</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          The support for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_string_ref</span></code> and its specializations
          is deprecated; users are encouraged to switch to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_string_view</span></code>,
          which is now supported for output to the formatting streams. The support
          for <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">basic_string_ref</span></code> will be removed in future
          releases.
        </li>
<li class="listitem">
          Added support for limiting the number of stored log files in the target
          directory of the file collector. The limit can be specified in the <code class="computeroutput"><span class="identifier">max_files</span></code> named parameter to the <code class="computeroutput"><span class="identifier">make_collector</span></code> or <code class="computeroutput"><span class="identifier">add_file_log</span></code>
          calls or as the "MaxFiles" parameter for the sink in the settings
          file. Thanks to Erich Keane for the patch. (<a href="https://svn.boost.org/trac/boost/ticket/8746" target="_top">#8746</a>)
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed various compilation problems for Windows CE.
        </li>
<li class="listitem">
          Fixed compilation problems on Solaris.
        </li>
<li class="listitem">
          Added a workaround for MSVC-10 and 11 generating broken code for formatters
          in some cases. (<a href="https://svn.boost.org/trac/boost/ticket/12025" target="_top">#12025</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h17"></a>
      <span class="phrase"><a name="log.changelog.2_7__boost_1_60"></a></span><a class="link" href="changelog.html#log.changelog.2_7__boost_1_60">2.7,
      Boost 1.60</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          On Windows, the configuration macro <code class="computeroutput"><span class="identifier">BOOST_LOG_USE_WINNT6_API</span></code>
          is no longer used by the library. The target Windows version should be
          configured by defining macro <code class="computeroutput"><span class="identifier">BOOST_USE_WINAPI_VERSION</span></code>
          to the desired WinAPI version (e.g. 0x0501 for Windows XP). This macro
          is used in multiple different Boost libraries besides Boost.Log.
        </li>
<li class="listitem">
          The default target Windows version is now Vista on compilers with recent
          enough Windows SDK and XP on others. The default is no longer chosen by
          Boost.Log but by the common WinAPI submodule used by different Boost libraries.
        </li>
<li class="listitem">
          Changed internal mutex type in the thread-safe queue implementation that
          is used in asynchronous sink frontends with the <code class="computeroutput"><span class="identifier">unbounded_fifo_queue</span></code>
          policy. The updated queue has improved performance in case of heavy thread
          contention (hundreds and thousands of logging threads) on POSIX-compatible
          systems.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed compilation for Android using Google NDK. (<a href="https://svn.boost.org/trac/boost/ticket/11559" target="_top">#11559</a>)
        </li>
<li class="listitem">
          Fixed compilation of some logging statements, where the first object to
          be put into stream is not directly supported by <code class="computeroutput"><span class="identifier">formatting_ostream</span></code>.
          (<a href="https://svn.boost.org/trac/boost/ticket/11549" target="_top">#11549</a>)
        </li>
<li class="listitem">
          Added a workaround for Solaris Studio 12.4, which should fix the compilation
          of <code class="computeroutput"><span class="identifier">formatting_ostream</span></code>.
          (<a href="https://svn.boost.org/trac/boost/ticket/11545" target="_top">#11545</a>)
        </li>
<li class="listitem">
          Fixed compilation when native <code class="computeroutput"><span class="keyword">wchar_t</span></code>
          type is disabled. Added a note of discouragement to the <a class="link" href="installation/config.html" title="Configuring and building the library">configuration</a>
          section. (<a href="https://svn.boost.org/trac/boost/ticket/11541" target="_top">#11541</a>)
        </li>
<li class="listitem">
          Fixed exporting symbols from the <code class="computeroutput"><span class="identifier">boost_log_setup</span></code>
          library on POSIX-like systems.
        </li>
<li class="listitem">
          Fixed build failure on Nuxi CloudABI.
        </li>
<li class="listitem">
          Fixed compilation of <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.decorators" title="Character decorators">character
          decorators</a>.
        </li>
<li class="listitem">
          Added a workaround for incorrect file name generation in <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text
          file sink backend</a>, when the file name contains date/time placeholders.
          (<a href="https://svn.boost.org/trac/boost/ticket/11691" target="_top">#11691</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h18"></a>
      <span class="phrase"><a name="log.changelog.2_6__boost_1_59"></a></span><a class="link" href="changelog.html#log.changelog.2_6__boost_1_59">2.6,
      Boost 1.59</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          On systems with <a href="https://gcc.gnu.org/wiki/Visibility" target="_top">symbol
          visibility</a> support (e.g. Linux) the library is now built with all
          internal symbols hidden. API symbols still have default visibility, so
          this shouldn't affect linking with the library.
        </li>
<li class="listitem">
          <span class="bold"><strong>Breaking change:</strong></span> The library has been
          ported to <a href="http://www.boost.org/doc/libs/release/doc/html/boost_typeindex.html" target="_top">Boost.TypeIndex</a>
          for its underlying type info management tool. This improved library compatibility
          with hidden symbol visibility mode on some compilers. This affected the
          following public interfaces:
          <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
<li class="listitem">
                <code class="computeroutput"><span class="identifier">invalid_type</span></code> exceptions
                thrown by the library now have <code class="computeroutput"><span class="identifier">typeindex</span><span class="special">::</span><span class="identifier">type_index</span></code>
                attached as the description of the offending type. The type was previously
                identified by <code class="computeroutput"><span class="identifier">type_info_wrapper</span></code>.
              </li>
<li class="listitem">
                <a href="http://www.boost.org/doc/libs/release/libs/exception/doc/boost-exception.html" target="_top">Boost.Exception</a>
                <code class="computeroutput"><span class="identifier">type_info_info</span></code> error
                information now contains <code class="computeroutput"><span class="identifier">typeindex</span><span class="special">::</span><span class="identifier">type_index</span></code>
                instead of <code class="computeroutput"><span class="identifier">type_info_wrapper</span></code>.
                This is the error info that can be used to obtain the type info from
                <code class="computeroutput"><span class="identifier">invalid_type</span></code> exceptions.
              </li>
<li class="listitem">
                <code class="computeroutput"><span class="identifier">attribute_value</span><span class="special">::</span><span class="identifier">get_type</span><span class="special">()</span></code>
                now returns <code class="computeroutput"><span class="identifier">typeindex</span><span class="special">::</span><span class="identifier">type_index</span></code>
                instead of <code class="computeroutput"><span class="identifier">type_info_wrapper</span></code>.
                If the <code class="computeroutput"><span class="identifier">attribute_value</span></code>
                object is empty, the returned <code class="computeroutput"><span class="identifier">type_index</span></code>
                is default-constructed (i.e. refers to the <code class="computeroutput"><span class="keyword">void</span></code>
                type). User-defined attribute value implementations should be similarly
                changed (the <code class="computeroutput"><span class="identifier">attribute_value</span><span class="special">::</span><span class="identifier">impl</span><span class="special">::</span><span class="identifier">get_type</span><span class="special">()</span></code> virtual method now also returns
                <code class="computeroutput"><span class="identifier">typeindex</span><span class="special">::</span><span class="identifier">type_index</span></code>).
              </li>
</ul></div>
        </li>
<li class="listitem">
          <code class="computeroutput"><span class="identifier">type_info_wrapper</span></code> component
          has been deprecated and will be removed in future releases. <a href="http://www.boost.org/doc/libs/release/doc/html/boost_typeindex.html" target="_top">Boost.TypeIndex</a>
          is recommended as a replacement.
        </li>
<li class="listitem">
          Removed the previously deprecated headers: <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">log</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">intrusive_ref_counter</span><span class="special">.</span><span class="identifier">hpp</span></code>,
          <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">log</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">explicit_operator_bool</span><span class="special">.</span><span class="identifier">hpp</span></code>, <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">log</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">empty_deleter</span><span class="special">.</span><span class="identifier">hpp</span></code>.
        </li>
<li class="listitem">
          Added support for building the library for OpenBSD. (<a href="https://svn.boost.org/trac/boost/ticket/11446" target="_top">#11446</a>)
        </li>
<li class="listitem">
          Improved internal implementation of the event synchronization primitive
          used for asynchronous logging. The updated implementation relies on <a href="http://www.boost.org/doc/libs/release/doc/html/atomic.html" target="_top">Boost.Atomic</a>
          for atomic operations which provides better portability. On Linux the implementation
          uses futexes directly. (<a href="https://svn.boost.org/trac/boost/ticket/11398" target="_top">#11398</a>)
        </li>
<li class="listitem">
          Changed the format of dates produced by the default formatter constructed
          from strings (e.g. when initializing the library from a config file). The
          new format displays months as numbers instead of abbreviated names. This
          allows for easier log record ordering when post-processing log files. (<a href="https://svn.boost.org/trac/boost/ticket/8839" target="_top">#8839</a>)
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed incorrect behavior of <code class="computeroutput"><span class="identifier">attribute_value_set</span><span class="special">::</span><span class="identifier">insert</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">attribute_value_set</span></code>
          constructor in some cases. The inserted elements could have made some previously
          inserted elements not findable. The constructor from <code class="computeroutput"><span class="identifier">attribute_set</span></code>s
          could leave some of the attribute values acquired from attributes not findable.
          (<a href="https://svn.boost.org/trac/boost/ticket/11190" target="_top">#11190</a>)
        </li>
<li class="listitem">
          Added missing function template exports. (<a href="https://svn.boost.org/trac/boost/ticket/11495" target="_top">#11495</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h19"></a>
      <span class="phrase"><a name="log.changelog.2_5__boost_1_58"></a></span><a class="link" href="changelog.html#log.changelog.2_5__boost_1_58">2.5,
      Boost 1.58</a>
    </h4>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed thread id formatting. The thread identifiers could be presented as
          zeros on big-endian platforms. Also the lower 4 bits of the ids were lost
          in the output.
        </li>
<li class="listitem">
          Fixed process id formatting. Process ids could have misplaced filler zeros.
          (<a href="https://svn.boost.org/trac/boost/ticket/10926" target="_top">#10926</a>)
        </li>
<li class="listitem">
          Fixed build failure on GNU Hurd.
        </li>
<li class="listitem">
          Fixed incorrect behavior of <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">text
          file sink backend</a> in case if free space on the file system gets
          exhausted. The sink will no longer create lots of empty files in attempt
          to recover. (<a href="https://svn.boost.org/trac/boost/ticket/11016" target="_top">#11016</a>)
        </li>
<li class="listitem">
          Fixed incorrect behavior of <code class="computeroutput"><span class="identifier">attribute_set</span><span class="special">::</span><span class="identifier">insert</span><span class="special">()</span></code> in some cases. The inserted elements
          could have made some previously inserted elements not findable. (<a href="https://svn.boost.org/trac/boost/ticket/11106" target="_top">#11106</a>)
        </li>
<li class="listitem">
          Fixed incorrect behavior of <code class="computeroutput"><span class="identifier">attribute_value_set</span><span class="special">::</span><span class="identifier">size</span><span class="special">()</span></code> if a large number of attribute values
          are inserted into the set. (<a href="https://svn.boost.org/trac/boost/ticket/11148" target="_top">#11148</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h20"></a>
      <span class="phrase"><a name="log.changelog.2_4__boost_1_57"></a></span><a class="link" href="changelog.html#log.changelog.2_4__boost_1_57">2.4,
      Boost 1.57</a>
    </h4>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.decorators.xml" title="XML character decorator">XML
          character decorator</a> now escapes quote (") characters.
        </li>
<li class="listitem">
          The exceptions thrown by asynchronous sinks created as a result of <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.settings" title="Library initialization from a settings container">initialization from settings</a>
          are now silently suppressed instead of terminating the application. If
          special error handling is needed, it is recommended to <a class="link" href="extension/settings.html#log.extension.settings.sinks" title="Adding support for user-defined sinks">register
          a user-defined sink factory</a>. (<a href="https://svn.boost.org/trac/boost/ticket/10638" target="_top">#10638</a>)
        </li>
<li class="listitem">
          Corrected syslog message composition on MSVC, if message length exceeds
          1025 bytes. (<a href="https://svn.boost.org/trac/boost/ticket/10700" target="_top">#10700</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h21"></a>
      <span class="phrase"><a name="log.changelog.2_3__boost_1_56"></a></span><a class="link" href="changelog.html#log.changelog.2_3__boost_1_56">2.3,
      Boost 1.56</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          For Windows targets, the library now compiles for Windows XP by default.
        </li>
<li class="listitem">
          Added indexing operators with <code class="computeroutput"><a class="link" href="../boost/log/attribute_name.html" title="Class attribute_name">attribute_name</a></code>
          arguments to <code class="computeroutput"><a class="link" href="../boost/log/record.html" title="Class record">record</a></code> and
          <code class="computeroutput"><a class="link" href="../boost/log/record_view.html" title="Class record_view">record_view</a></code>. The operators
          behave the same way as the similar operators of <code class="computeroutput"><a class="link" href="../boost/log/attribute_value_set.html" title="Class attribute_value_set">attribute_value_set</a></code>
          (i.e. return an <code class="computeroutput"><a class="link" href="../boost/log/attribute_value.html" title="Class attribute_value">attribute_value</a></code>
          identified by the name).
        </li>
<li class="listitem">
          Added operators for non-const object output to <code class="computeroutput"><a class="link" href="../boost/log/basic_formatting_ostream.html" title="Class template basic_formatting_ostream">basic_formatting_ostream</a></code>.
          (<a href="https://svn.boost.org/trac/boost/ticket/9389" target="_top">#9389</a>)
        </li>
<li class="listitem">
          Added new format flags "%c", "%C" and "%F"
          to the <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.named_scope" title="Named scope formatter">named
          scope formatter</a>. The new flags allow putting function names and
          source file names of named scopes into the formatted strings. (<a href="https://svn.boost.org/trac/boost/ticket/9263" target="_top">#9263</a>)
        </li>
<li class="listitem">
          Added support for incomplete and empty markers to the <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.named_scope" title="Named scope formatter">named
          scope formatter</a>. The markers can be used to customize the scope
          list presentation when the list is empty or limited by the <code class="computeroutput"><span class="identifier">depth</span></code> named parameter. (<a href="https://svn.boost.org/trac/boost/ticket/9123" target="_top">#9123</a>)
        </li>
<li class="listitem">
          The default presentation for incomplete named scope lists has changed.
          In previous releases the incomplete marker included a trailing delimiter,
          for example "scope1&lt;-scope2&lt;-...". From this release the
          trailing delimiter is omitted, so in the same case the formatting result
          would be: "scope1&lt;-scope2..." (note the missing trailing "&lt;-").
        </li>
<li class="listitem">
          Added a support header for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">regex</span></code>.
          If <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">log</span><span class="special">/</span><span class="identifier">support</span><span class="special">/</span><span class="identifier">std_regex</span><span class="special">.</span><span class="identifier">hpp</span></code> is included, one can use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">regex</span></code> expressions with <a class="link" href="detailed/expressions.html#log.detailed.expressions.predicates.advanced_string_matching" title="Advanced string matching filter">string
          matching filters</a>.
        </li>
<li class="listitem">
          By default Boost.Log uses <a href="http://www.boost.org/doc/libs/release/libs/regex/index.html" target="_top">Boost.Regex</a>
          internally as the regular expressions backend. <a href="http://www.boost.org/doc/libs/release/doc/html/xpressive.html" target="_top">Boost.Xpressive</a>
          was used in previous releases. This backend is used to implement string
          matching filters parsed from strings or settings. Using <a href="http://www.boost.org/doc/libs/release/libs/regex/index.html" target="_top">Boost.Regex</a>
          by default results in smaller executables and also better runtime performance.
        </li>
<li class="listitem">
          Added build configuration macros for regex backend selection. By defining
          <code class="computeroutput"><span class="identifier">BOOST_LOG_USE_STD_REGEX</span></code>,
          <code class="computeroutput"><span class="identifier">BOOST_LOG_USE_BOOST_REGEX</span></code>
          or <code class="computeroutput"><span class="identifier">BOOST_LOG_USE_BOOST_XPRESSIVE</span></code>
          at Boost.Log build time the user can select which regex implementation
          will be used by the library internally for the string matching filters
          parsed from strings and settings. Note that this selection does not affect
          <a class="link" href="detailed/expressions.html#log.detailed.expressions.predicates.advanced_string_matching" title="Advanced string matching filter">string
          matching filters in expressions</a>.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.dump" title="Binary dump manipulator"><code class="computeroutput"><span class="identifier">dump</span></code></a> manipulator output on AVX2-enabled
          CPUs (e.g. Intel Haswell).
        </li>
<li class="listitem">
          Fixed compilation of <code class="computeroutput"><span class="identifier">get_attribute</span></code>
          method of loggers.
        </li>
<li class="listitem">
          Fixed a possible race in <code class="computeroutput"><span class="identifier">locked_backend</span><span class="special">()</span></code> function implementation of synchronous
          and asynchronous sink frontends.
        </li>
<li class="listitem">
          Fixed a possible infinite block of the logging threads in the asynchronous
          sink enqueue methods when <code class="computeroutput"><a class="link" href="../boost/log/sinks/block_on_overflow.html" title="Class block_on_overflow">block_on_overflow</a></code>
          strategy was used.
        </li>
<li class="listitem">
          Added a workaround for ticket <a href="https://svn.boost.org/trac/boost/ticket/9363" target="_top">#9363</a>.
        </li>
<li class="listitem">
          Added a workaround for MSVC bug that caused the <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.add_value" title="Attribute value attaching manipulator"><code class="computeroutput"><span class="identifier">add_value</span></code></a> manipulator produce
          garbage attribute values when using with immediate integer constants. (<a href="https://svn.boost.org/trac/boost/ticket/9320" target="_top">#9320</a>)
        </li>
</ul></div>
<h4>
<a name="log.changelog.h22"></a>
      <span class="phrase"><a name="log.changelog.2_2__boost_1_55"></a></span><a class="link" href="changelog.html#log.changelog.2_2__boost_1_55">2.2,
      Boost 1.55</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Added a new configuration macro <code class="computeroutput"><span class="identifier">BOOST_LOG_WITHOUT_DEFAULT_FACTORIES</span></code>.
          By defining this macro the user can disable compilation of the default
          filter and formatter factories used by settings parsers. This can substantially
          reduce binary sizes while still retaining support for settings parsers.
          Note that when this macro is defined the user will have to register <span class="underline">all</span> attributes in the library.
        </li>
<li class="listitem">
          Rewritten some of the parsers to reduce the compiled binary size. The rewritten
          parsers are more robust in detecting ambiguous and incorrect input.
        </li>
<li class="listitem">
          The header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">log</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">intrusive_ref_counter</span><span class="special">.</span><span class="identifier">hpp</span></code> is deprecated and will be removed
          in future releases. Its contents have been reworked and moved to <a href="http://www.boost.org/doc/libs/release/libs/smart_ptr/smart_ptr.htm" target="_top">Boost.SmartPtr</a>,
          as <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">smart_ptr</span><span class="special">/</span><span class="identifier">intrusive_ref_counter</span><span class="special">.</span><span class="identifier">hpp</span></code>.
        </li>
<li class="listitem">
          The header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">log</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">explicit_operator_bool</span><span class="special">.</span><span class="identifier">hpp</span></code> is deprecated and will be removed
          in future releases. Its contents have been moved to <a href="http://www.boost.org/doc/libs/release/libs/utility/utility.htm" target="_top">Boost.Utility</a>,
          as <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">explicit_operator_bool</span><span class="special">.</span><span class="identifier">hpp</span></code>.
        </li>
<li class="listitem">
          The header <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">log</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">empty_deleter</span><span class="special">.</span><span class="identifier">hpp</span></code> is deprecated and will be removed
          in future releases. Its contents have been moved to <a href="http://www.boost.org/doc/libs/release/libs/utility/utility.htm" target="_top">Boost.Utility</a>,
          as <code class="computeroutput"><span class="identifier">boost</span><span class="special">/</span><span class="identifier">utility</span><span class="special">/</span><span class="identifier">empty_deleter</span><span class="special">.</span><span class="identifier">hpp</span></code>.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Bug fixes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed <a class="link" href="detailed/attributes.html#log.detailed.attributes.timer" title="Stop watch (timer)"><code class="computeroutput"><span class="identifier">timer</span></code></a>
          attribute generating incorrect time readings on Windows on heavy thread
          contention when <code class="computeroutput"><span class="identifier">QueryPerformanceCounter</span></code>
          API was used.
        </li>
<li class="listitem">
          Fixed a bug in the filter parser that prevented using parsed filters with
          some attributes. For example, parsed filters didn't work with a string-typed
          attribute value, if the value was compared to a numeric operand.
        </li>
<li class="listitem">
          Fixed thread id formatting discrepancies between the default sink and formatters.
        </li>
<li class="listitem">
          Fixed parsing RotationTimePoint parameter values from settings, when the
          time point only included time of day (i.e. daily rotation).
        </li>
<li class="listitem">
          Closed tickets: <a href="https://svn.boost.org/trac/boost/ticket/8815" target="_top">#8815</a>, <a href="https://svn.boost.org/trac/boost/ticket/8819" target="_top">#8819</a>, <a href="https://svn.boost.org/trac/boost/ticket/8915" target="_top">#8915</a>, <a href="https://svn.boost.org/trac/boost/ticket/8917" target="_top">#8917</a>, <a href="https://svn.boost.org/trac/boost/ticket/9139" target="_top">#9139</a>, <a href="https://svn.boost.org/trac/boost/ticket/9140" target="_top">#9140</a>,
          <a href="https://svn.boost.org/trac/boost/ticket/9153" target="_top">#9153</a>, <a href="https://svn.boost.org/trac/boost/ticket/9155" target="_top">#9155</a>.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h23"></a>
      <span class="phrase"><a name="log.changelog.2_1__boost_1_54"></a></span><a class="link" href="changelog.html#log.changelog.2_1__boost_1_54">2.1,
      Boost 1.54</a>
    </h4>
<p>
      <span class="bold"><strong>Breaking changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
          <code class="computeroutput"><a class="link" href="../boost/log/basic_formatting_ostream.html" title="Class template basic_formatting_ostream">basic_formatting_ostream</a></code>
          no longer derives from <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span></code>,
          but rather reimplements its and its base classes interface closely. This
          solves problems with overloading <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></code> for <code class="computeroutput"><a class="link" href="../boost/log/basic_formatting_ostream.html" title="Class template basic_formatting_ostream">basic_formatting_ostream</a></code>
          and user-defined types. This will break user's code if it relied on the
          inheritance from the standard stream types (such as passing <code class="computeroutput"><a class="link" href="../boost/log/basic_formatting_ostream.html" title="Class template basic_formatting_ostream">basic_formatting_ostream</a></code>
          object as an argument to a function receiving <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span></code>).
          Please, use the <code class="computeroutput"><span class="identifier">stream</span><span class="special">()</span></code> member function to access the standard
          stream. This change will <span class="bold"><strong>not</strong></span> break the
          code that outputs user-defined types to a <code class="computeroutput"><a class="link" href="../boost/log/basic_formatting_ostream.html" title="Class template basic_formatting_ostream">basic_formatting_ostream</a></code>
          stream while there are only <code class="computeroutput"><span class="keyword">operator</span><span class="special">&lt;&lt;</span></code> overloads for the standard stream
          types - the code will compile and use the standard operator overloads,
          as before.
        </li></ul></div>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Removed the use of deprecated macros of <a href="http://www.boost.org/doc/libs/release/libs/config/doc/html/index.html" target="_top">Boost.Config</a>.
        </li>
<li class="listitem">
          Build system improved. On Windows, presence of Message Compiler is now
          detected automatically, and support for event log is only enabled when
          the tool is available.
        </li>
<li class="listitem">
          Fixed compilation when <code class="computeroutput"><span class="identifier">BOOST_LOG_USE_COMPILER_TLS</span></code>
          configuration macro is defined.
        </li>
<li class="listitem">
          Fixed compilation of some uses of the <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.add_value" title="Attribute value attaching manipulator"><code class="computeroutput"><span class="identifier">add_value</span></code></a> manipulator with MSVC.
        </li>
<li class="listitem">
          Added a new <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.dump" title="Binary dump manipulator"><code class="computeroutput"><span class="identifier">dump</span></code></a> output manipulator for printing
          binary data.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h24"></a>
      <span class="phrase"><a name="log.changelog.2_0__13_april_2013"></a></span><a class="link" href="changelog.html#log.changelog.2_0__13_april_2013">2.0,
      13 April 2013</a>
    </h4>
<p>
      <span class="bold"><strong>General changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          The library is now compatible with Boost 1.53 or newer. <a href="http://www.boost.org/doc/libs/release/libs/filesystem/doc/index.htm" target="_top">Boost.Filesystem</a>
          v2 no longer supported.
        </li>
<li class="listitem">
          The library now does not introduce separate logging cores for different
          character types. A lot of other library components also became character
          type agnostic. The application can now use loggers of different character
          types with the common logging core. The library performs character code
          conversion as needed. <a href="http://www.boost.org/doc/libs/release/libs/locale/doc/html/index.html" target="_top">Boost.Locale</a>
          can be used to construct locale objects for proper encoding conversion.
        </li>
<li class="listitem">
          The <code class="computeroutput"><span class="identifier">BOOST_LOG_NO_COMPILER_TLS</span></code>
          configuration macro has been replaced with <code class="computeroutput"><span class="identifier">BOOST_LOG_USE_COMPILER_TLS</span></code>
          with the opposite meaning. The support for compiler intrinsics for TLS
          is now disabled by default.
        </li>
<li class="listitem">
          Added configuration macros <code class="computeroutput"><span class="identifier">BOOST_LOG_WITHOUT_DEBUG_OUTPUT</span></code>,
          <code class="computeroutput"><span class="identifier">BOOST_LOG_WITHOUT_EVENT_LOG</span></code>
          and <code class="computeroutput"><span class="identifier">BOOST_LOG_WITHOUT_SYSLOG</span></code>.
          <code class="computeroutput"><span class="identifier">BOOST_LOG_NO_SETTINGS_PARSERS_SUPPORT</span></code>
          macro renamed to <code class="computeroutput"><span class="identifier">BOOST_LOG_WITHOUT_SETTINGS_PARSERS</span></code>.
          The new macros allow to selectively disable support for the corresponding
          sink backends.
        </li>
<li class="listitem">
          The library now uses <a href="http://www.boost.org/doc/libs/release/doc/html/xpressive.html" target="_top">Boost.Xpressive</a>
          instead of <a href="http://www.boost.org/doc/libs/release/libs/regex/index.html" target="_top">Boost.Regex</a>
          internally which makes it unnecessary to build the latter in order to use
          the library. <a href="http://www.boost.org/doc/libs/release/libs/regex/index.html" target="_top">Boost.Regex</a>
          is still supported on the user's side.
        </li>
<li class="listitem">
          Made some internal code to detect Windows NT6 API availability at run time,
          if not explicitly enabled by the <code class="computeroutput"><span class="identifier">BOOST_LOG_USE_WINNT6_API</span></code>
          macro. The code compiled without the macro defined will still be able run
          on NT5, but when run on NT6 it will be more efficient. With the macro defined
          the resulting code will not run on NT5, but will be a little more efficient
          on NT6 than without the macro.
        </li>
<li class="listitem">
          Added a concept of a default sink. The default sink is used when there
          are no sinks configured in the logging core. The sink is synchronous and
          thread-safe, it requires no configuration and is overridden by any sinks
          configured in the core by user. The default sink will write log messages
          to the console, prepending with a timestamp, thread id and severity level.
        </li>
<li class="listitem">
          Trivial logging no longer implicitly initializes the library. Instead,
          the default sink is used to display log messages, unless the library is
          configured otherwise. It is now possible to use both trivial and advanced
          logging.
        </li>
<li class="listitem">
          Attribute values can now be added to log records after filtering. Such
          values do not participate in filtering but can be used by formatters and
          sinks. Log record message is now one of such attribute values, it is no
          longer directly accessible from the log record interface.
        </li>
<li class="listitem">
          Formatters and sinks no longer operate on log records but rather on <code class="computeroutput"><a class="link" href="../boost/log/record_view.html" title="Class record_view">record_view</a></code>s. Records are now
          moved from when pushed to the core for further processing. This is done
          in order to eliminate the possibility of unsafe record modification after
          pushing to the core. As a consequence, log records can no longer be copied,
          only moving is allowed. Record views can be copied and moved; copying is
          a shallow operation.
        </li>
<li class="listitem">
          The implementation now provides several stream manipulators. Notably, the
          <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.to_log" title="Customized logging manipulator"><code class="computeroutput"><span class="identifier">to_log</span></code></a> manipulator allows to customize
          formatting for particular types and attributes without changing the regular
          streaming operator. Also, the <a class="link" href="detailed/utilities.html#log.detailed.utilities.manipulators.add_value" title="Attribute value attaching manipulator"><code class="computeroutput"><span class="identifier">add_value</span></code></a> manipulator can be used
          in logging expressions to attach attribute values to the record.
        </li>
<li class="listitem">
          Made a lot of improvements to speedup code compilation.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Attributes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Changed the interface and the way of handling attribute values. The value
          is now a pimpl wrapper around the value holder. The <code class="computeroutput"><a class="link" href="../boost/log/attribute_value.html" title="Class attribute_value">attribute_value</a></code>
          class in various components of the library is no longer pointed to with
          <code class="computeroutput"><span class="identifier">shared_ptr</span></code>s but instead
          is handled by value. This allowed to simplify attribute value handling
          in simple cases.
        </li>
<li class="listitem">
          Similarly to attribute values, the interface of attributes has been reworked
          in the pimpl fashion. All attributes now derive from the <code class="computeroutput"><a class="link" href="../boost/log/attribute.html" title="Class attribute">attribute</a></code>
          base class, which holds the reference to the implementation. All attributes
          now have to be created by value rather than wrapped into <code class="computeroutput"><span class="identifier">shared_ptr</span></code> by user, which makes the code
          more concise.
        </li>
<li class="listitem">
          Added support for casting attributes from the base class <code class="computeroutput"><a class="link" href="../boost/log/attribute.html" title="Class attribute">attribute</a></code>
          to the actual attribute type. This can be useful when the concrete attribute
          factory provides additional interfaces.
        </li>
<li class="listitem">
          The attribute value no longer has the <code class="computeroutput"><span class="identifier">get</span></code>
          method. Use the <code class="computeroutput"><span class="identifier">extract</span></code>
          function as a replacement.
        </li>
<li class="listitem">
          The key type of attribute sets and attribute values set has been changed.
          The new key type is called <code class="computeroutput"><a class="link" href="../boost/log/attribute_name.html" title="Class attribute_name">attribute_name</a></code>.
          It is constructible from strings, so in most cases users won't need to
          change the code. See <a class="link" href="detailed/attributes.html#log.detailed.attributes.related_components.attribute_name" title="Attribute names">here</a>
          for more information.
        </li>
<li class="listitem">
          Attribute values view have been renamed to attribute value set. The container
          now supports adding more attribute values after being constructed.
        </li>
<li class="listitem">
          Attribute sets and attribute value sets no longer maintain order of elements.
          Although it wasn't stated explicitly, the containers used to be ordered
          associative containers. Now the order of elements is unspecified. The implementation
          has been reworked to speed up insertion/removal of attributes, as well
          as attribute lookup and values set construction. The drawback is that memory
          footprint may get increased in some cases.
        </li>
<li class="listitem">
          Attribute sets now use small memory pools to speed up element insertion/removal.
        </li>
<li class="listitem">
          The header <code class="computeroutput"><span class="identifier">scoped_attribute</span><span class="special">.</span><span class="identifier">hpp</span></code>
          moved from <code class="computeroutput"><span class="identifier">utility</span></code> to the
          <code class="computeroutput"><span class="identifier">attributes</span></code> directory. The
          header <code class="computeroutput"><span class="identifier">attribute_value_extractor</span><span class="special">.</span><span class="identifier">hpp</span></code>
          in <code class="computeroutput"><span class="identifier">utility</span></code> has been replaced
          with headers <code class="computeroutput"><a class="link" href="../attributes.html#header.boost.log.attributes.value_extraction_hpp" title="Header &lt;boost/log/attributes/value_extraction.hpp&gt;">boost/log/attributes/value_extraction.hpp</a></code>
          and <code class="computeroutput"><a class="link" href="../attributes.html#header.boost.log.attributes.value_visitation_hpp" title="Header &lt;boost/log/attributes/value_visitation.hpp&gt;">boost/log/attributes/value_visitation.hpp</a></code>
          in the <code class="computeroutput"><span class="identifier">attributes</span></code> directory.
          The two new headers define the revised API of attribute value extraction
          and visitation, respectively. See <a class="link" href="detailed/attributes.html#log.detailed.attributes.related_components.value_processing" title="Attribute value extraction and visitation">here</a>
          for more details.
        </li>
<li class="listitem">
          <a class="link" href="detailed/attributes.html#log.detailed.attributes.related_components.scoped_attributes" title="Scoped attributes">Scoped
          attribute</a> macros simplified. The attribute constructor arguments
          are specified next to the attribute type and tag type is no longer required.
        </li>
<li class="listitem">
          The <a class="link" href="detailed/attributes.html#log.detailed.attributes.thread_id" title="Current thread identifier"><code class="computeroutput"><span class="identifier">current_thread_id</span></code></a>
          attribute no longer uses <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code>
          type for thread identification. An internal type is used instead, the type
          is accessible as <code class="computeroutput"><span class="identifier">current_thread_id</span><span class="special">::</span><span class="identifier">value_type</span></code>.
          The new thread ids are taken from the underlying OS API and thus more closely
          correlate to what may be displayed by debuggers and system diagnostic tools.
        </li>
<li class="listitem">
          Added <a class="link" href="detailed/attributes.html#log.detailed.attributes.process_name" title="Current process name"><code class="computeroutput"><span class="identifier">current_process_name</span></code></a> attribute.
          The attribute generates a string with the executable name of the current
          process.
        </li>
<li class="listitem">
          The <code class="computeroutput"><span class="identifier">functor</span></code> attribute has
          been renamed to <code class="computeroutput"><a class="link" href="../boost/log/attributes/function.html" title="Class template function">function</a></code>.
          The generator function has been renamed from <code class="computeroutput"><span class="identifier">make_functor_attr</span></code>
          to <code class="computeroutput"><span class="identifier">make_function</span></code>. The header
          has been renamed from <code class="computeroutput"><span class="identifier">functor</span><span class="special">.</span><span class="identifier">hpp</span></code>
          to <code class="computeroutput"><span class="identifier">function</span><span class="special">.</span><span class="identifier">hpp</span></code>.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Logging sources:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed compilation problems with exception handling logger feature.
        </li>
<li class="listitem">
          Global logger storage made more friendly to the setups in which hidden
          visibility is set by default.
        </li>
<li class="listitem">
          Added the macros for separated global logger declaration and definition.
          Old macros have been renamed to better reflect their effect (<code class="computeroutput"><span class="identifier">BOOST_LOG_DECLARE_GLOBAL_LOGGER_INIT</span></code>
          to <code class="computeroutput"><span class="identifier">BOOST_LOG_INLINE_GLOBAL_LOGGER_INIT</span></code>,
          <code class="computeroutput"><span class="identifier">BOOST_LOG_DECLARE_GLOBAL_LOGGER</span></code>
          to <code class="computeroutput"><span class="identifier">BOOST_LOG_INLINE_GLOBAL_LOGGER_DEFAULT</span></code>,
          <code class="computeroutput"><span class="identifier">BOOST_LOG_DECLARE_GLOBAL_LOGGER_CTOR_ARGS</span></code>
          to <code class="computeroutput"><span class="identifier">BOOST_LOG_INLINE_GLOBAL_LOGGER_CTOR_ARGS</span></code>).
          Also, the macros no longer define the <code class="computeroutput"><span class="identifier">get_logger</span></code>
          free function for logger acquisition. Use <code class="computeroutput"><span class="identifier">logger</span><span class="special">::</span><span class="identifier">get</span></code>
          instead. See <a class="link" href="detailed/sources.html#log.detailed.sources.global_storage" title="Global storage for loggers">here</a>
          for more information.
        </li>
<li class="listitem">
          The channel logger now supports changing the channel name after construction.
          The channel name can be set either by calling the modifier method or by
          specifying the name in the logging statement. Added <code class="computeroutput"><span class="identifier">BOOST_LOG_STREAM_CHANNEL</span></code>
          and <code class="computeroutput"><span class="identifier">BOOST_LOG_STREAM_CHANNEL_SEV</span></code>
          (as well as their shorthands <code class="computeroutput"><span class="identifier">BOOST_LOG_CHANNEL</span></code>
          and <code class="computeroutput"><span class="identifier">BOOST_LOG_CHANNEL_SEV</span></code>)
          macros that allow to specify channel name for the log record.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Logging sinks:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Types for integral constants for syslog and event log were renamed to drop
          the <code class="computeroutput"><span class="identifier">_t</span></code> suffix.
        </li>
<li class="listitem">
          Formatting functionality moved to sink frontends. Sink backends that support
          record formatting derive from the <code class="computeroutput"><span class="identifier">basic_formatting_sink_backend</span></code>
          class template, which indicates to the frontend that record formatting
          is required. This breaks user-side API of the library: the formatter and
          locale has to be set to the frontend rather than backend.
        </li>
<li class="listitem">
          Formatting support no longer makes frontend thread synchronization mandatory.
          Formatting is done prior to locking for processing the record in the backend
          and can be performed concurrently in multiple threads.
        </li>
<li class="listitem">
          Added support for flushing sinks. A sink backend that supports flushing
          has to define public method with the following signature: <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">flush</span><span class="special">()</span></code>.
        </li>
<li class="listitem">
          Asynchronous sink frontend reworked, ordering asynchronous sink removed.
          The <code class="computeroutput"><a class="link" href="../boost/log/sinks/asynchronous_sink.html" title="Class template asynchronous_sink">asynchronous_sink</a></code>
          class template now allows to specify record queueing strategy. Several
          strategies provided, including <code class="computeroutput"><a class="link" href="../boost/log/sinks/unbounded_fifo_queue.html" title="Class unbounded_fifo_queue">unbounded_fifo_queue</a></code>
          (the default) and <code class="computeroutput"><a class="link" href="../boost/log/sinks/unbounded_ordering_queue.html" title="Class template unbounded_ordering_queue">unbounded_ordering_queue</a></code>
          which cover the functionality of asynchronous sink frontends in 1.x releases.
          See the <a class="link" href="detailed/sink_frontends.html#log.detailed.sink_frontends.async" title="Asynchronous sink frontend">asynchronous
          sink frontend</a> docs for more details.
        </li>
<li class="listitem">
          Lock-free FIFO record queueing in asynchronous sinks reworked to reduce
          log record processing stalls.
        </li>
<li class="listitem">
          Added <code class="computeroutput"><span class="identifier">Append</span></code> configuration
          file parameter for text file sinks. If this parameter is set to <code class="computeroutput"><span class="keyword">true</span></code>, the sink will append log records to
          the existing log file instead of overwriting it.
        </li>
<li class="listitem">
          Added bounded variants of asynchronous sink frontends. Implemented two
          strategies to handle queue overflows: either log records are dropped or
          logging threads are blocked until there is space in the queue.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Filters and formatters:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          As a result of character type unification, filters no longer depend on
          the character type.
        </li>
<li class="listitem">
          Two new types were introduced to dynamically store filters and formatters:
          <code class="computeroutput"><a class="link" href="../boost/log/filter.html" title="Class filter">filter</a></code> and <code class="computeroutput"><a class="link" href="../boost/log/basic_formatter.html" title="Class template basic_formatter">basic_formatter</a></code>.
          Both new types implement type erasure and provide function calling operators
          to invoke the stored filter or formatter.
        </li>
<li class="listitem">
          Filters and formatters were rewritten. The new implementation is based
          on <a href="http://www.boost.org/doc/libs/release/libs/phoenix/doc/html/index.html" target="_top">Boost.Phoenix</a>
          and resides in the <code class="computeroutput"><span class="identifier">expressions</span></code>
          namespace. Attribute placeholders are now interoperable with other template
          expressions based on <a href="http://www.boost.org/doc/libs/release/libs/phoenix/doc/html/index.html" target="_top">Boost.Phoenix</a>.
          All template expression headers now reside in the <code class="computeroutput"><span class="identifier">expressions</span></code>
          subdirectory.
        </li>
<li class="listitem">
          The library now supports defining keywords for attributes (see <code class="computeroutput"><span class="identifier">BOOST_LOG_ATTRIBUTE_KEYWORD</span></code> macro). Keywords
          can be used in template expressions instead of attribute placeholders and
          also as a key in container lookups.
        </li>
<li class="listitem">
          Filters and formatters do not throw exceptions by default when an attribute
          value cannot be used to complete the function (e.g. when the value is missing
          or has inappropriate type). The offending filter subexpression will return
          <code class="computeroutput"><span class="keyword">false</span></code> in such cases, the formatter
          will result in empty string instead of the value. The behavior can be changed
          by calling <code class="computeroutput"><span class="identifier">or_default</span></code> or
          <code class="computeroutput"><span class="identifier">or_throw</span></code> member functions
          on the attribute value placeholder in the filtering/formatting expression.
        </li>
<li class="listitem">
          Date and time formatter implementation is not based on <a href="http://www.boost.org/doc/libs/release/doc/html/date_time.html" target="_top">Boost.DateTime</a>
          IO facets anymore. The new implementation improves formatting performance.
          The formatter has been renamed to <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.date_time" title="Date and time formatter"><code class="computeroutput"><span class="identifier">format_date_time</span></code></a>.
        </li>
<li class="listitem">
          Named scope formatter now supports scope format specification. The scope
          format can include the scope name, as well as file name and line number.
          The formatter has been renamed to <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.named_scope" title="Named scope formatter"><code class="computeroutput"><span class="identifier">format_named_scope</span></code></a>.
        </li>
<li class="listitem">
          <a class="link" href="detailed/expressions.html#log.detailed.expressions.formatters.decorators" title="Character decorators">Character
          decorators</a> were renamed to <code class="computeroutput"><span class="identifier">c_decor</span></code>,
          <code class="computeroutput"><span class="identifier">c_ascii_decor</span></code>, <code class="computeroutput"><span class="identifier">xml_decor</span></code> and <code class="computeroutput"><span class="identifier">csv_decor</span></code>.
          The generic character decorator is named <code class="computeroutput"><span class="identifier">char_decor</span></code>
          now.
        </li>
<li class="listitem">
          Added a new <a class="link" href="detailed/expressions.html#log.detailed.expressions.predicates.channel_severity_filter" title="Severity threshold per channel filter">channel
          severity filter</a>. The filter allows to setup severity thresholds
          for different channels. The filter checks log record severity level against
          the threshold corresponding to the channel the record belongs to.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Documentation changes:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Most code examples from the docs have been extracted into compilable standalone
          examples, which can be used for testing and experimenting with the library.
        </li>
<li class="listitem">
          Added a lot of cross-references to the documentation, which should simplify
          navigation.
        </li>
</ul></div>
<p>
      <span class="bold"><strong>Miscellaneous:</strong></span>
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Fixed a bug: the logging core could enter an infinite loop inside <code class="computeroutput"><span class="identifier">push_record</span></code> if a sink throws and the
          exception is suppressed by the exception handler set in the core.
        </li>
<li class="listitem">
          Changed the type dispatching implementation to reduce the usage of virtual
          functions. This greatly reduced the library size.
        </li>
<li class="listitem">
          Type dispatchers made more friendly to the setups in which hidden visibility
          is set by default.
        </li>
<li class="listitem">
          The interface of type dispatchers changed. The dispatcher now returns
          <code class="computeroutput"><span class="identifier">type_visitor</span></code> instance by
          value, and the visitor is no longer a base for the actual receiver of the
          dispatched value. Instead, the visitor now refers to the receiver, if one
          is capable to consume the value. The <code class="computeroutput"><span class="identifier">visit</span></code>
          method has been renamed to <code class="computeroutput"><span class="keyword">operator</span>
          <span class="special">()</span></code>. The static type dispatcher now
          requires a reference to the receiver on construction, it doesn't imply
          that the receiver derives from the dispatcher anymore.
        </li>
<li class="listitem">
          The <code class="computeroutput"><span class="identifier">slim_string</span></code> utility
          has been removed. There is no replacement.
        </li>
<li class="listitem">
          The library now uses many features from the latest C++ standard (aka C++11).
          For instance, many library components now support move semantics. <a href="http://www.boost.org/doc/libs/release/doc/html/move.html" target="_top">Boost.Move</a>
          is used for move emulation on C++03-compatible compilers.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h25"></a>
      <span class="phrase"><a name="log.changelog.1_1__02_december_2011"></a></span><a class="link" href="changelog.html#log.changelog.1_1__02_december_2011">1.1,
      02 December 2011</a>
    </h4>
<p>
      This release mostly fixes bugs in the code and documentation.
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Added support for <a href="http://www.boost.org/doc/libs/release/libs/filesystem/doc/index.htm" target="_top">Boost.Filesystem</a>
          v3.
        </li>
<li class="listitem">
          A number of bugs fixed.
        </li>
<li class="listitem">
          Corrections in the documentation.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h26"></a>
      <span class="phrase"><a name="log.changelog.1_0__09_may_2010"></a></span><a class="link" href="changelog.html#log.changelog.1_0__09_may_2010">1.0,
      09 May 2010</a>
    </h4>
<p>
      This release mostly fixes bugs in the code and documentation. The next major
      release (2.0) will contain breaking changes and feature additions. The 1.0
      branch will not receive any feature updates.
    </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Added some optimization for thread local storage. In Windows setups, if
          you dynamically load Boost.Log binaries during the application run time,
          this optimization may lead to crashes. In that case, you may disable it
          by defining <code class="computeroutput"><span class="identifier">BOOST_LOG_NO_COMPILER_TLS</span></code>
          during the library build process. The macro also affects other platforms,
          which may be useful if your compiler does not support TLS.
        </li>
<li class="listitem">
          Added a few public accessors and convenience constructors to severity and
          channel loggers.
        </li>
<li class="listitem">
          Added ability to rotate log files at the specified time points. The <code class="computeroutput"><span class="identifier">rotation_interval</span></code> keyword is no longer
          available. The same functionality is achieved with the new <code class="computeroutput"><span class="identifier">time_based_rotation</span></code> keyword and the
          <code class="computeroutput"><span class="identifier">rotation_at_time_interval</span></code>
          predicate. See <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">here</a>
          for more details.
        </li>
<li class="listitem">
          Improved support for MinGW and Cygwin.
        </li>
<li class="listitem">
          A number of bugs fixed. Added workarounds to compile on GCC 4.2.
        </li>
<li class="listitem">
          Lots of corrections in the documentation.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h27"></a>
      <span class="phrase"><a name="log.changelog.release_candidate_4__08_jan_2010"></a></span><a class="link" href="changelog.html#log.changelog.release_candidate_4__08_jan_2010">Release
      Candidate 4, 08 Jan 2010</a>
    </h4>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Substantial documentation improvement. The tutorial section has been reorganized.
        </li>
<li class="listitem">
          Library headers have been reorganized. Some other Boost libraries that
          were previously included by headers have been made optional. Such dependencies
          have been extracted into separate headers in the <code class="computeroutput"><span class="identifier">support</span></code>
          directory. Top level library headers now mostly include nested headers.
        </li>
<li class="listitem">
          Keywords have moved into a dedicated <code class="computeroutput"><span class="identifier">keywords</span></code>
          namespace. There are no longer nested <code class="computeroutput"><span class="identifier">keywords</span></code>
          namespaces in <code class="computeroutput"><span class="identifier">sinks</span></code>, <code class="computeroutput"><span class="identifier">attributes</span></code>, etc. All keywords have been
          extracted into separate headers in the <code class="computeroutput"><span class="identifier">keywords</span></code>
          directory.
        </li>
<li class="listitem">
          Removed rotating file stream. As a replacement, a <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_file" title="Text file backend">new
          file sink</a> has been added, which allows to achieve the same results
          ans adds a few more features.
        </li>
<li class="listitem">
          Added a new <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.text_multifile" title="Text multi-file backend">multifile</a>
          sink backend.
        </li>
<li class="listitem">
          Added a new ordering asynchronous sink frontend.
        </li>
<li class="listitem">
          The <a class="link" href="detailed/sink_backends.html#log.detailed.sink_backends.syslog" title="Syslog backend">syslog</a> sink
          backend is now supported on Windows, too. The sink no longer requires native
          support for POSIX API for syslog, but is able to send syslog packets to
          a remote server over UDP.
        </li>
<li class="listitem">
          Loggers implementation has been improved. Feature composition mechanism
          has been cleaned up.
        </li>
<li class="listitem">
          Added support for scoped logging. There is now a distinct <a class="link" href="detailed.html#log.detailed.core.record" title="Logging records">log
          record entity</a>, which is returned by the core as a result of filtering.
          It is possible to fill in the record message in any way the user wants,
          not necessarily with a streaming expression. The record object is now processed
          by sinks and formatters.
        </li>
<li class="listitem">
          Added support for exception control. User can register exception handlers
          at one of the three layers: for a particular sink, at the core layer, and
          for a particular logger (given that it has the appropriate feature). Sinks
          and core will not suppress exceptions by default. Filter and formatters
          will throw if the requested attribute value is not found.
        </li>
<li class="listitem">
          Added a few new formatters, called character decorators. These can be useful
          to post-process the formatted output before passing it on to the sink.
        </li>
<li class="listitem">
          Added attributes for thread and process identifiers. These identifiers
          are automatically added after the call to <code class="computeroutput"><span class="identifier">add_common_attributes</span></code>.
        </li>
<li class="listitem">
          Helper initialization functions, such as <code class="computeroutput"><span class="identifier">init_log_to_file</span></code>
          now accept more customization options as named arguments.
        </li>
<li class="listitem">
          A new <a class="link" href="detailed/utilities.html#log.detailed.utilities.setup.settings" title="Library initialization from a settings container">initialization
          interface</a> has been exposed. One can fill a settings container and
          use it to initialize the library.
        </li>
<li class="listitem">
          The library setup support code has been extracted into a separate binary.
          Further on, this binary will be made optional to build.
        </li>
<li class="listitem">
          Added a new mode of logging, called trivial logging. In this mode the library
          requires no initialization at all, however it does not offer many ways
          of customization.
        </li>
<li class="listitem">
          A number of bugs fixed.
        </li>
<li class="listitem">
          A few optimizations added to improve multithreaded applications performance.
        </li>
<li class="listitem">
          Removed some bug workarounds for older Boost releases. The library now
          requires Boost 1.39 or newer.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h28"></a>
      <span class="phrase"><a name="log.changelog.release_candidate_3__08_feb_2009"></a></span><a class="link" href="changelog.html#log.changelog.release_candidate_3__08_feb_2009">Release
      Candidate 3, 08 Feb 2009</a>
    </h4>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
          Substantial documentation improvement.
        </li>
<li class="listitem">
          Added several Windows-specific sinks: Event Log (simplified and advanced),
          Windows debugger and experimental Event Trace for Windows Vista and later.
        </li>
<li class="listitem">
          Loggers now consist of a number of independent features that can be composed
          the way the user needs. User-defined features can be developed and injected
          into the mix.
        </li>
<li class="listitem">
          Attribute value extractors improved. With the new extract function attribute
          values can be extracted from the attribute values view by employing lambda
          functors.
        </li>
<li class="listitem">
          Some files and classes were moved or renamed to improve code clarity and
          shorten names.
        </li>
<li class="listitem">
          A number of bugs fixed.
        </li>
<li class="listitem">
          Added tests.
        </li>
</ul></div>
<h4>
<a name="log.changelog.h29"></a>
      <span class="phrase"><a name="log.changelog.release_candidate_2"></a></span><a class="link" href="changelog.html#log.changelog.release_candidate_2">Release
      Candidate 2</a>
    </h4>
<p>
      No one really remembers these dark ages...
    </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2007-2021 Andrey Semashev<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>).
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../boost/log/current_scope.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
